package com.zml.control.database;

import com.zml.control.okhttp.HuaweiCloudApi;
import ohos.ace.ability.AceAbility;
import ohos.app.AbilityContext;
import ohos.app.Context;
import ohos.data.DatabaseHelper;
import ohos.data.preferences.Preferences;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * 轻量级数据存储，用于保存临时数据，参考：https://developer.harmonyos.com/cn/docs/documentation/doc-guides/database-preference-guidelines-0000000000030083
 */
public class PreferenceDataBase {
    private static final HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG,0x0,PreferenceDataBase.class.getName());
    private static Context context;                 // 数据文件存储路径：/data/data/{PackageName}/{AbilityName}/preferences。
    private static String filename = "pdb";         // fileName表示文件名，其取值不能为空，也不能包含路径，默认存储目录可以通过context.getPreferencesDir()获取。
    private static DatabaseHelper databaseHelper;
    private static Preferences preferences;
    private static PreferenceDataBase instance;
    private AbilityContext mContext;

    public PreferenceDataBase(Context _context){
        context = _context;
        databaseHelper = new DatabaseHelper(context);           // context入参类型为ohos.app.Context。
        preferences = databaseHelper.getPreferences(filename);  // 获取Preferences实例。
    }
    private static Preferences getPreferences(Context context) {
        if (preferences == null) {
            DatabaseHelper databaseHelper = new DatabaseHelper(context);
            preferences = databaseHelper.getPreferences(filename);
        }
        return preferences;
    }

    /**
     * 通过HuaweiCloudAPI获取Token，并保存到轻量数据存储
     * @param context
     */
    public static void SaveIAMUserToken(Context context,String token) {
        getPreferences(context).putString("token", token);
        getPreferences(context).flushSync();
    }
    public static String GetIAMUserToken(Context context){
        return getPreferences(context).getString("token", "");
    }

    /**
     * 获取Preferences实例，
     * @param context  数据库文件将存储在由context上下文指定的目录里。
     * @param name  fileName表示文件名，其取值不能为空，也不能包含路径
     * @return  //返回对应数据库的Preferences实例
     */
    public static Preferences register(Context context, String name) {
        DatabaseHelper databaseHelper = new DatabaseHelper(context);
        Preferences preferences = databaseHelper.getPreferences(name);
        return preferences;
    }

    /**
     * Map[保存]到偏好型数据库
     * @param preferences  数据库的Preferences实例
     * @param map  要保存的map
     */
    public static void SaveMap(Preferences preferences, Map<String,String> map){
        // 遍历map
        for (Map.Entry<String, String> entry : map.entrySet()) {
            HiLog.info(TAG,entry.getKey() + "=" + entry.getValue());
            preferences.putString(entry.getKey(),entry.getValue());//3.将数据写入Preferences实例，
        }
        preferences.flushSync();//4.通过flush()或者flushSync()将Preferences实例持久化。
    }

    /**
     *  从偏好型数据库[读取]Map
     * @param preferences  数据库的Preferences实例
     * @return  要读取的map
     */
    public static Map<String,?> GetCookieMap(Preferences preferences){
        Map<String, ?> map = new HashMap<>();
        map = preferences.getAll();//3.读取数据
        return map;
    }
}
